%ifndef BOOT_MEMORY_INSTALLCONTIGUOUSPTES
%define BOOT_MEMORY_INSTALLCONTIGUOUSPTES
; InstallContiguousPTEs(LPVOID lpBase, LPVOID lpFrame, DWORD dwProperty, DWORD dwCount)
; @param lpBase 写入表项的起始地址
; @param lpFrame 物理页框地址（注意：是 32 位完整地址，末尾12位必须为全 0）
; @param dwProperty 页表项属性
; @param dwCount 连续写入的表项数
%define lpBase [ebp + 36]
%define lpFrame [ebp + 40]
%define dwProperty [ebp + 44]
%define dwCount [ebp + 48]
bits 32
Boot.Memory.InstallContiguousPTEs:
Boot.Memory.InstallContiguousPTEs.Initialize:
    pusha
    mov ebp, esp
    mov ebx, lpBase
    mov eax, lpFrame
    or eax, dwProperty
    mov ecx, dwCount
    mov esi, 0
Boot.Memory.InstallContiguousPTEs.Loop:
    mov [ebx + esi], eax
    add esi, 4
    add eax, 0x1000 ; 下一个 4 KiB 页框
    loop Boot.Memory.InstallContiguousPTEs.Loop
Boot.Memory.InstallContiguousPTEs.Return:
    popa
    ret
%undef lpBase
%undef lpFrame
%undef dwProperty
%undef dwCount
%endif